import datetime
from django.contrib.auth.models import User
from django.db import models

class Regla(models.Model):
    nombre = models.CharField(maxlength=50)
    descripcion = models.TextField()
    def __str__(self):
        return self.nombre
    class Admin:
        pass

class Nivel(models.Model):
    nombre = models.CharField(maxlength=25)
    descripcion = models.TextField(blank=True)
    def __str__(self):
        return self.nombre
    class Admin:
        pass

class Problema(models.Model):
    nombre = models.CharField(maxlength=70)
    descripcion = models.TextField(blank=True)
    ejemplo = models.TextField(blank=True)
    nivel = models.ForeignKey(Nivel)
    
    metodo = models.CharField(maxlength=50)
    retorno =models.CharField(maxlength=50)
    parametros = models.CharField(maxlength=50)
    def get_puntaje(self, contest):
        try:
            return self.puntaje_set.get(Competencia=contest).porcentaje
        except:
            return 0
    def __str__(self):
        return self.nombre
    def __str__(self):
        return self.nombre
    class Admin:
        pass

class Lenguaje(models.Model):
    nombre = models.CharField(maxlength=50)
    descripcion = models.TextField(blank=True)
    def __str__(self):
        return self.nombre
    class Admin:
        pass

class Prueba(models.Model):
    entrada = models.CharField(maxlength=50)
    salida = models.CharField(maxlength=50)

    problema = models.ForeignKey(Problema)
    def __str__(self):
        return self.problema.nombre
    class Admin:
        pass

class Competencia(models.Model):
    nombre = models.CharField("Nombre",maxlength=50)
    descripcion = models.TextField("Descripcion",blank=True)
    inicio = models.DateTimeField("Fecha de inicio",default=datetime.datetime.now)
    fin = models.DateTimeField("Fecha de finalizacion",default=datetime.datetime.now)
    tiempo = models.IntegerField("Duracion (min)")
    creada = models.DateTimeField(auto_now_add=True)

    regla = models.ForeignKey(Regla)
    lenguajes = models.ManyToManyField(Lenguaje)
    participantes = models.ManyToManyField(User)
    def get_aboslute_url(self):
        return "ABC"
    def __str__(self):
        return self.nombre    
    def is_active(self):
        now =  datetime.datetime.now()
        return (self.inicio < now) and  (now <= self.fin)
    def is_pending(self):
        now =  datetime.datetime.now()
        return now < self.inicio
    def is_old(self):
        now =  datetime.datetime.now()
        return self.fin < now
    def get_problems(self):
        return [puntaje.problema for puntaje in self.puntaje_set.all()]

    def __str__(self):
        return self.nombre
    problemas = property(get_problems,None,None,None)
    class Admin:
        pass

class Solucion(models.Model):
    tiempo = models.PositiveIntegerField()
    codigo = models.TextField(blank=True)
    puntaje = models.IntegerField()
    inicio = models.DateTimeField("Fecha de inicio", default=datetime.datetime.now)
    compila = models.BooleanField(default=False)

    participante = models.ForeignKey(User)
    problema = models.ForeignKey(Problema)
    lenguaje = models.ForeignKey(Lenguaje)
    competencia = models.ForeignKey(Competencia)
    def __str__(self):
        return '%s - %s' % (self.problema.nombre, self.competencia.nombre)
    class Admin:
        pass

class Puntaje(models.Model):
    porcentaje = models.PositiveIntegerField()
    problema = models.ForeignKey(Problema)
    competencia = models.ForeignKey(Competencia)
    def __str__(self):
        return '%s - %s' % (self.problema.nombre, self.competencia.nombre)
    class Admin:
        pass

class PerfilUsuario(models.Model):
    user = models.ForeignKey(User, unique=True)
    GENDER_CHOICES = (
        ('M', 'Masculino'),
        ('F', 'Femenino'),
    )
    sexo = models.CharField(maxlength=1, choices=GENDER_CHOICES)
    karma = models.PositiveIntegerField(default=0)
    #foto = models.ImageField()
